from restful.model.tables import Blog

def PostsPaginationQuery(data):
    """
    博客分页查询处理器（逐步查询优化版）
        参数:
            {
                'pids': [int],     # 要查询的博客ID列表
                'desc': bool,      # 排序方向(True降序，False升序)
                'offset': int,     # 当前偏移量
                'limit': int       # 每页数量
            }

        返回:
            {
                'blogs': [Blog],   # 查询到的博客列表
                'offset': int,     # 新的偏移量(用于下次查询)
            }
    """
    pids = data.get('pids', [])
    reverse = data.get('desc', False)
    limit = data.get('limit', 10)

    # 0. 设置第一页的情况，offset为给出pids列表中最大+1或最小-1
    if 'offset' not in data:
        offset = (max(pids) + 1) if reverse else (min(pids) - 1) if pids else 0
    else:
        offset = data['offset']

    # 1. 过滤并排序PID列表
    if reverse:
        filtered_pids = [pid for pid in pids if pid < offset]  # 降序
        filtered_pids.sort(reverse=True)
    else:
        filtered_pids = [pid for pid in pids if pid > offset]  # 升序
        filtered_pids.sort(reverse=False)

    # 2. 逐步查询直到凑够limit
    result_blogs = []
    new_offset = offset

    for pid in filtered_pids:
        blog = Blog.query.get(pid)  # 单条查询
        if blog:
            result_blogs.append(blog)
            new_offset = pid  # 更新为最后一个有效PID
            if len(result_blogs) >= limit:
                break

    return {
        'blogs': result_blogs,
        'offset': new_offset,
    }